package jp.co.showbiz.common.util;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

/**
 * エンコーダ&デコーダーに要するユーティリティクラス
 * 
 * @author $$Author:  $$
 * @version $$Revision: 1.2 $$
 */
public class EncoderUtility {

	/**
	 * MS932 stringをISO stringにエンコードする
	 * 
	 * @param orgStr
	 *            one MS932 string
	 * @return one ISO string
	 */
	public static String MS932ToISO(String orgStr) {
		/* 判断 */
		if (orgStr == null) {
			/* 戻る */
			return "";
		}
		String isoStr = "";
		try {
			/* isoStrを取得 */
			isoStr = new String(orgStr.getBytes("MS932"), "ISO-8859-1");
		} catch (UnsupportedEncodingException ex) {
			ex.printStackTrace();
			/* isoStrを取得 */
			isoStr = orgStr;
		} catch (Exception e) {
			e.printStackTrace();
			/* isoStrを取得 */
			isoStr = orgStr;
		}
		/* 戻る */
		return isoStr;
	}

	/**
	 * ISO stringをMS932 stringにエンコードする
	 * 
	 * @param orgStr
	 *            one ISO string
	 * @return one MS932 string
	 */
	public static String ISOToMS932(String orgStr) {
		/* 判断 */
		if (orgStr == null) {
			/* 戻る */
			return "";
		}
		String ms932Str = "";
		try {
			/* ms932Strを取得 */
			ms932Str = new String(orgStr.getBytes("ISO-8859-1"), "MS932");
		} catch (UnsupportedEncodingException ex) {
			ex.printStackTrace();
			ms932Str = orgStr;
		} catch (Exception e) {
			e.printStackTrace();
			/* ms932Strを取得 */
			ms932Str = orgStr;
		}
		/* 戻る */
		return ms932Str;
	}

	/**
	 * UTF8 stringをSJIS stringにエンコードする
	 * 
	 * @param orgStr
	 *            string
	 * @return one MS932 string
	 */
	public static String UTF8TOSJIS(String orgStr) {
		/* 判断 */
		if (orgStr == null) {
			/* 戻る */
			return "";
		}
		String ms932Str = "";
		try {
			/* ms932Strを取得 */
			ms932Str = new String(orgStr.getBytes("UTF-8"), "SJIS");
		} catch (UnsupportedEncodingException ex) {
			ex.printStackTrace();
			ms932Str = orgStr;
		} catch (Exception e) {
			e.printStackTrace();
			/* ms932Strを取得 */
			ms932Str = orgStr;
		}
		/* 戻る */
		return ms932Str;
	}

	/**
	 * MS932 stringをSJIS stringにエンコードする
	 * 
	 * @param orgStr
	 *            string
	 * @return one isoStr string
	 */
	public static String MS932ToSJIS(String orgStr) {
		/* 判断 */
		if (orgStr == null) {
			/* 戻る */
			return "";
		}
		String isoStr = "";
		try {
			/* isoStrを取得 */
			isoStr = new String(orgStr.getBytes("MS932"), "Windows-31J");

		} catch (UnsupportedEncodingException ex) {
			ex.printStackTrace();
			/* isoStrを取得 */
			isoStr = orgStr;
		} catch (Exception e) {
			e.printStackTrace();
			/* isoStrを取得 */
			isoStr = orgStr;
		}
		/* 戻る */
		return isoStr;
	}

	/**
	 * SJIS stringをWindows31J stringにエンコードする
	 * 
	 * @param orgStr
	 *            string
	 * @return one isoStr string
	 */
	public static String SJISToWindows31J(String orgStr) {
		/* 判断 */
		if (orgStr == null) {
			/* 戻る */
			return "";
		}

		String osName = System.getProperty("os.name");
		if (osName.equalsIgnoreCase("Windows XP")) {
			return orgStr;
		}

		String isoStr = "";
		try {
			/* isoStrを取得 */
			isoStr = new String(orgStr.getBytes("SJIS"), "Windows-31J");

		} catch (UnsupportedEncodingException ex) {
			ex.printStackTrace();
			/* isoStrを取得 */
			isoStr = orgStr;
		} catch (Exception e) {
			e.printStackTrace();
			/* isoStrを取得 */
			isoStr = orgStr;
		}
		/* 戻る */
		return isoStr;
	}

	/**
	 * BASE64 Encoder
	 * 
	 * @param str
	 *            String
	 * @return result
	 */
	public static String base64Encode(String str) {
		String result = "";
		sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
		byte[] b1 = str.getBytes();
		result = encoder.encode(b1);
		return result;
	}

	/**
	 * BASE64 Decoder
	 * 
	 * @param str
	 *            String
	 * @return result
	 */
	public static String base64Decode(String str) {
		String result = "";
		try {
			sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
			byte[] b1 = decoder.decodeBuffer(str);
			result = new String(b1);
		} catch (IOException ex) {
			ex.printStackTrace();
		}
		return result;
	}

}
